package com.fowo.api.ptt.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fowo.api.ptt.enitty.PrintTemplate;
import com.fowo.api.ptt.enitty.PrintTemplateGroup;
import com.fowo.api.ptt.enitty.PrintTemplateType;
import com.fowo.api.ptt.model.PrintTemplateSearchParamPo;

import java.util.List;

/**
 * 打印模版服务接口
 * @author yl_ls
 */
public interface PrintTemplateService {
    /**
     * 获取所有打印模版组
     */
    List<PrintTemplateGroup> getAllTemplateGroups();

    /**
     * 获取指定用户可见的打印模版组
     * @param userId 用户编号
     */
    List<PrintTemplateGroup> getVisibleTemplateGroups(Long userId);

    /**
     * 获取指定编号的打印模版组
     * @param groupId 打印模版组编号
     */
    PrintTemplateGroup getTemplateGroupById(Long groupId);

    /**
     * 获取指定分组下的所有模版类型
     * @param groupId 打印模版组编号
     */
    List<PrintTemplateType> getTypesByGroupId(Long groupId);

    /**
     * 获取指定用户可见的指定分组下的所有模版类型
     * @param groupId 打印模版组编号
     */
    List<PrintTemplateType> getVisibleTypesByGroupId(Long groupId, Long userId);

    /**
     * 搜索打印模板分页结果
     * @param searchParamPo 搜索参数
     */
    Page<PrintTemplate> pageSearch(PrintTemplateSearchParamPo searchParamPo);

    /**
     * 获取指定编号的打印模版
     * @param id
     * @return
     */
    PrintTemplate getById(Long id);

    /**
     * 新增打印模版
     * @param printTemplate 打印模版
     */
    Long create(PrintTemplate printTemplate);

    /**
     * 更新打印模版
     * @param printTemplate 打印模版
     */
    void update(PrintTemplate printTemplate);

    /**
     * 删除指定编号的打印模版
     * @param id 打印模版编号
     */
    void delete(Long id);

    /**
     * 设置模板分类的默认模板
     * @param typeId 模板分类编号
     * @param defaultTemplateId 默认模板编号，可更新 null
     */
    void setTypeDefaultTemplateId(Long typeId, Long defaultTemplateId);

    /**
     * 获取指定编号的模板类型
     * @param typeId 模板类型编号
     */
    PrintTemplateType getTypeById(Long typeId);
}
